package kuonjisai.swing.component;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


// 고급 컴퍼넌트 ( 많은 데이터 표시)
// JList 					: 몇 가지 데이터 목록을 나란히 표시하고
//							한가지를 선택하게 함
// JComboBox  			: 	일명 dorpdownlist 라고함
//									평소에는 목록을 숨기고 있다가
//       							클릭하면 전체 목록이 나타남
//									 최종적으로 선택한 항목이 화면에 표시됨

// JTable						: 엑셀처럼 대량의 데이터들ㅇ을
//													표 형태로 나타냄
//								표는 대량의 데이터들을 행과 열형태로 표시한 것
//								JTable에서는 DefaultTableModel 이라는 클래스를
//								이용해서 데이터를 표현함
//								테이블의 제목행은 1차원배열에
//								본문행은 2차원 배열에 작성해 둔 다음
//								DefaultTableModel의 매개변수로 전달
//								한편, 배열 대신, Vector(동적베열) 를 이용해서
//								TableModel을 작성하기도 함






public class J21_AdvancedComponent extends JFrame {

	private JPanel contentPane;
	private JTable table;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					J21_AdvancedComponent frame = new J21_AdvancedComponent();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public J21_AdvancedComponent() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.CENTER);
		

		
		// table = new JTable( 8, 5 ); // 8행 5열 테이블

		// 테이블의 제목행 생성
		 String [] tbtitle = {"번호", "이름", "국어", "영어", "수학"};
		// 테이의 본문 행 생성
		 String [][] tbdata = {
				 {   "1", "김태희", "99", "88", "77" },
				 {   "2", "송혜교", "99", "88", "77" },
				 {   "3", "최재훈", "97", "88", "77" },
				 {   "4", "전제복", "98", "88", "77" },
				 {   "5", "유키", "03", "88", "77" },
				 {   "6", "에리", "32", "88", "77" },
				 {   "7", "할부지", "48", "81", "77" },
				 {   "8", "전지현", "95", "86", "77" }
			 
		 };
		// 제목/본문행을 DefaultTableModel클래스에 등록 - 테이블에 데이터를 표시하는 방법
		// 세밀하게 제어 가능
		DefaultTableModel tbmodel = new DefaultTableModel( tbdata, tbtitle);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane_1.setPreferredSize(new Dimension(400, 100));
		panel.add(scrollPane_1);
		 // JTable 생성자에 DefaultTableModel 클래스에 전달
		table = new JTable( tbmodel );
		scrollPane_1.setViewportView(table);
		
		JPanel panel_1 = new JPanel();
		contentPane.add(panel_1, BorderLayout.NORTH);
		
		
		String[] datalist = {"김태의", "송혜교", "전지현", "개그", "간첩", "박명수", "삼식이" };
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		panel_1.add(scrollPane);
		scrollPane.setPreferredSize(new Dimension(125, 55));
		
		final JList<String> list = new JList<>();
		scrollPane.setViewportView(list);
		list.setListData( datalist );
		// list.setPreferredSize( new Dimension( 120, 50 ) );
		
		JButton btn1 = new JButton("New button");
		btn1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int ids = list.getSelectedIndex();
				String val = list.getSelectedValue();
				String msg = ids + val;
			
				
						
				JOptionPane.showMessageDialog(null, msg );
				
			}
		});
		panel_1.add(btn1);
		
		JPanel panel_2 = new JPanel();
		contentPane.add(panel_2, BorderLayout.SOUTH);
		
		final JComboBox  comboBox = new JComboBox( datalist );
		panel_2.add(comboBox);
		
		JButton btnNewButton_1 = new JButton("New button");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int num = comboBox.getSelectedIndex();
				String val = (String) comboBox.getSelectedItem();
				String msg = num + "/" + val ; 
					
				JOptionPane.showMessageDialog(null, msg);
			}
		});
		panel_2.add(btnNewButton_1);
	}

}
